package com.jiangxjsy.authorization.exception;

import com.jiangxjsy.core.exception.AuthorizationException;
import com.jiangxjsy.core.exception.BasicException;
import com.jiangxjsy.core.exception.UserNotFoundException;
import com.jiangxjsy.core.wrap.Result;
import com.jiangxjsy.core.wrap.ResultBuilder;
import com.jiangxjsy.core.wrap.ResultCode;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * wukong-crm-master
 * 蒋胜宇
 * 2025/6/5 17:22
 */

@RestControllerAdvice
public class WebExceptionHandler {
    /**
     * 处理 BasicException 异常
     * 其实现了 ResultCode 接口，所以直接使用 ResultBuilder 封装返回即可
     * 但因为 RuntimeException 不兼容 Result，使用多个异常需要分开处理
     *
     * @param exception 异常
     * @return Result
     */
    @ExceptionHandler(BasicException.class)
    public Result<?> basicExceptionHandler(BasicException exception) {
        return ResultBuilder.error(exception);
    }

    /**
     * 处理 UserNotFoundException 异常，其处理逻辑同 BasicException
     *
     * @param exception 异常
     * @return Result
     */
    @ExceptionHandler(UserNotFoundException.class)
    public Result<?> userNotFoundExceptionHandler(UserNotFoundException exception) {
        return ResultBuilder.error(exception);
    }

    /**
     * 处理 AuthorizationException 异常，其处理逻辑同 BasicException
     *
     * @param exception 异常
     * @return Result
     */
    @ExceptionHandler(AuthorizationException.class)
    public Result<?> authorizationExceptionHandler(AuthorizationException exception) {
        return ResultBuilder.error(exception);
    }

    /**
     * 处理 Exception 异常，此处处理所有未处理的异常
     *
     * @param ignore 忽略异常
     * @return Result
     */
    @ExceptionHandler(Exception.class)
    public Result<?> exceptionHandler(Exception ignore) {
        return ResultBuilder.error(ResultCode.SystemResultCode.SYSTEM_ERROR);
    }
}
